/*
 * @Description:成员内部类
 * 
 * @Author: rendc
 * 
 * @Date: 2025-08-06 09:49:41
 * 
 * @LastEditors: rendc
 * 
 * @LastEditTime: 2025-08-06 10:19:18
 */

//  外部类
public class Outer {
  private int outer_num = 10;
  private int num = 20;

  // 定义成员内部类
  public class Inner {
    private int inner_num = 30;
    private int num = 40;

    // 成员内部类不能定义static成员属性或者成员方法
    // public static int a = 10;
    // The method showA cannot be declared static;
    // public static void showA() {
    // System.out.println(a);
    // }
    // 成员内部类中可以直接访问外部类中所有的成员属性和成员方法（包含private）
    void show() {
      // 局部变量
      int num = 50;
      System.out.println("内部类中：outer_num=" + outer_num);
      System.out.println("内部类中：num=" + num);
      System.out.println("内部类中：this.num=" + this.num);
      System.out.println("内部类中：Outer.this.num=" + Outer.this.num);
    }
  }

  // 定义外部类方法
  // 在外部类中可以直接访问内部类中所有的成员属性和成员方法（包含private），但是要借助内部类的对象
  public void disp() {
    // 外部类中实例化内部类对象 方式1 简化版
    Inner inner = new Inner();
    System.out.println("外部类中：disp()");
    inner.show();
    // 外部类中实例化内部类对象 方式2 完整版
    Outer.Inner inner2 = this.new Inner();
    System.out.println("外部类中：disp()");
    System.out.println(inner2.inner_num);
  }
}